package 笔试做题;

import java.util.*;

/**
 * 题目描述:
 * 一共五行, 第一行三个整数, 第一个表示文件的数量, 第二个表示第一个机器上修改的次数, 第三个表示第二个机器上修改的次数
 * 第二三行表示, 第一个机器上修改的索引开始位置和结束位置, 如第二行 1 3 5, 第三行 2 7 5, 表示修改了三次, 分别是1, 2和3, 4, 5, 6, 7和5
 * 第四五行表示, 第二个机器上的修改, 具体如上。
 * 计算两个机器中, 修改的部分的冲突的数量。
 * 10 2 3
 * 3 5
 * 4 8
 * 1 5 7
 * 3 5 9
 * 返回4
 */
public class S220319_美团3 {

    // 根据修改列表, 把
    public static void help1(boolean[] record, List<int[]> modifyList){
        // 按照开始位置排序一下
        modifyList.sort(Comparator.comparingInt((int[] x) -> x[0]));
        int startPre = 0;
        int endPre = 0;
        int start = 0;
        int end = 0;
        int listLen = modifyList.size();
        for(int i = 0; i < listLen; i++){
            start = modifyList.get(i)[0];
            end = modifyList.get(i)[1];
            if(start < endPre){
                if(end > endPre){
                    // 这次修改的区间和上一次部分重合, 也有部分不重合
                    Arrays.fill(record, endPre, end + 1, true);
                    endPre = end;
                }
            }else{
                // 这次修改的区间和上一次完全不重合
                Arrays.fill(record, start, end + 1, true);
                endPre = end;
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] line1 = sc.nextLine().split(" ");
        String[] line2 = sc.nextLine().split(" ");
        String[] line3 = sc.nextLine().split(" ");
        String[] line4 = sc.nextLine().split(" ");
        String[] line5 = sc.nextLine().split(" ");
        long startTime = System.currentTimeMillis();
        int totalNum = Integer.parseInt(line1[0]);
        // 分别记录一下两台机器上修改的区间, 因为编号从1开始, 所以 - 1;
        List<int[]> modifyList1 = new ArrayList<>();
        for(int i = 0; i < Integer.parseInt(line1[1]); i++){
            modifyList1.add(new int[]{Integer.parseInt(line2[i]) - 1, Integer.parseInt(line3[i]) - 1});
        }
        List<int[]> modifyList2 = new ArrayList<>();
        for(int i = 0; i < Integer.parseInt(line1[2]); i++){
            modifyList2.add(new int[]{Integer.parseInt(line4[i]) - 1, Integer.parseInt(line5[i]) - 1});
        }
        // 创建两个record, 记录一下两台机器中被修改的部分
        boolean[] record1 = new boolean[totalNum];
        help1(record1, modifyList1);
//        for(int i = 0; i < Integer.parseInt(line1[1]); i++){
//            Arrays.fill(record1, modifyList1.get(i)[0], modifyList1.get(i)[1] + 1, true);
//        }
        boolean[] record2 = new boolean[totalNum];
        help1(record2, modifyList2);
//        for(int i = 0; i < Integer.parseInt(line1[2]); i++){
//            Arrays.fill(record2, modifyList2.get(i)[0], modifyList2.get(i)[1] + 1, true);
//        }
        // 统计重合个数
        int count = 0;
        for(int i = 0; i < totalNum; i++){
            if(record1[i] && record2[i]){
                count ++;
            }
        }
        System.out.println(count);
//        System.out.println("timeCost: " + (System.currentTimeMillis() - startTime));
    }

}
